<?php

namespace app\models\cmiot;

/**
 * 中移接口
 * Trait ApiTrait
 * @package app\models\cmiot
 */
trait ApiTrait
{
    /**
     * 在线信息实时查询
     * 集团客户根据所属物联卡的码号信息查询该卡的GPRS在线状态、IP地址、APN、RAT信息。
     * @param string $msisdn
     * @param string $iccid
     * @param string $imsi
     * @return array
     * {
     *     RAT, // 1 3G 2 2G 6 4G及其它
     *     IP, // 用户IP地址
     *     GPRSSTATUS, // 00 离线 01 在线
     *     APN // 用户接入的APN
     * }
     */
    public function gprsrealsingle($msisdn = null, $iccid = null, $imsi = null)
    {
        $data = [];
        if (!empty($msisdn)) {
            $data['msisdn'] = $msisdn;
        }
        if (!empty($iccid)) {
            $data['iccid'] = $iccid;
        }
        if (!empty($imsi)) {
            $data['imsi'] = $imsi;
        }
        $json = $this->post('/gprsrealsingle', '0001000000008', $data);
        return $json[0];
    }

    /**
     * 用户状态信息实时查询
     * 集团客户可根据所属物联卡的码号信息实时查询该卡的状态信息。
     * @param string $msisdn
     * @param string $iccid
     * @param string $imsi
     * @return string 00-正常；01-单向停机；02-停机；03-预销号；04-销号；05-过户；06-休眠；07-待激活；99-号码不存在
     */
    public function userstatusrealsingle($msisdn = null, $iccid = null, $imsi = null)
    {
        $data = [];
        if (!empty($msisdn)) {
            $data['msisdn'] = $msisdn;
        }
        if (!empty($iccid)) {
            $data['iccid'] = $iccid;
        }
        if (!empty($imsi)) {
            $data['imsi'] = $imsi;
        }
        $json = $this->post('/userstatusrealsingle', '0001000000009', $data);
        return $json[0]['STATUS'];
    }

    /**
     * 码号信息查询
     * 根据ICCID、IMSI、MSISDN任意1个码号查询剩余2个码号信息的能力。
     * @param string $cardInfo 号码
     * @param string $type 0 msisdn 1 imsi 2 iccid
     * @return array
     * {
     *     ICCID,
     *     MSISDN,
     *     IMSI
     * }
     */
    public function cardinfo($cardInfo, $type)
    {
        $data = [];
        $data['card_info'] = $cardInfo;
        $data['type'] = $type;
        $json = $this->post('/cardinfo', '0001000000010', $data);
        return $json[0];
    }

    /**
     * 开关机信息实时查询
     * 根据物联卡码号信息实时查询终端开关机状态。
     * @param string $msisdn
     * @param string $iccid
     * @param string $imsi
     * @return string 0 关机 1 开机
     */
    public function onandoffrealsingle($msisdn = null, $iccid = null, $imsi = null)
    {
        $data = [];
        if (!empty($msisdn)) {
            $data['msisdn'] = $msisdn;
        }
        if (!empty($iccid)) {
            $data['iccid'] = $iccid;
        }
        if (!empty($imsi)) {
            $data['imsi'] = $imsi;
        }
        $json = $this->post('/onandoffrealsingle', '0001000000025', $data);
        return $json[0]['status'];
    }

    /**
     * 物联卡短信服务开通查询
     * 集团客户可以通过卡号（MSISDN/ICCID/IMSI，单卡）信息查询此卡的短信服务开通状态。
     * @param string $msisdn
     * @param string $iccid
     * @param string $imsi
     * @return string 0 关闭 >0 开通
     */
    public function querysmsopenstatus($msisdn = null, $iccid = null, $imsi = null)
    {
        $data = [];
        if (!empty($msisdn)) {
            $data['msisdn'] = $msisdn;
        }
        if (!empty($iccid)) {
            $data['iccid'] = $iccid;
        }
        if (!empty($imsi)) {
            $data['imsi'] = $imsi;
        }
        $json = $this->post('/querysmsopenstatus', '0001000000429', $data);
        return $json[0]['issignsms'];
    }

    /**
     * 物联卡GPRS服务开通查询
     * 集团客户可以通过卡号（MSISDN/ICCID/IMSI，单卡）信息查询此卡的GPRS服务开通状态。
     * @param string $msisdn
     * @param string $iccid
     * @param string $imsi
     * @return string 0 关闭 >0 开通
     */
    public function querygprsopenstatus($msisdn = null, $iccid = null, $imsi = null)
    {
        $data = [];
        if (!empty($msisdn)) {
            $data['msisdn'] = $msisdn;
        }
        if (!empty($iccid)) {
            $data['iccid'] = $iccid;
        }
        if (!empty($imsi)) {
            $data['imsi'] = $imsi;
        }
        $json = $this->post('/querygprsopenstatus', '0001000000430', $data);
        return $json[0]['issigngprs'];
    }

    /**
     * 物联卡APN服务开通查询
     * 集团客户可以通过卡号（MSISDN/ICCID/IMSI，单卡）信息查询此卡的APN服务开通状态。
     * @param string $msisdn
     * @param string $iccid
     * @param string $imsi
     * @return array
     * {
     *     apnname, // APN名称
     *     status, // 订购状态 01 有效 02 取消 03 暂停
     *     message // 未开通信息
     * }
     */
    public function queryapnopenstatus($msisdn = null, $iccid = null, $imsi = null)
    {
        $data = [];
        if (!empty($msisdn)) {
            $data['msisdn'] = $msisdn;
        }
        if (!empty($iccid)) {
            $data['iccid'] = $iccid;
        }
        if (!empty($imsi)) {
            $data['imsi'] = $imsi;
        }
        $json = $this->post('/queryapnopenstatus', '0001000000431', $data);
        return $json[0];
    }

    /**
     * 物联卡生命周期查询
     * 集团客户根据卡号（imsi、msisdn、iccid三个中任意一个），查询物联卡当前生命周期，
     * 生命周期包括：00:正式期，01:测试期，02:沉默期，03:其他。
     * @param string $msisdn
     * @param string $iccid
     * @param string $imsi
     * @return array
     * {
     *     lifecycle, // 物联卡生命周期。包括：00:正式期，01:测试期，02:沉默期，03:其他。
     *     opentime // 物联卡开卡时间。格式：YYYY-MM-DD hh:mm:ss。
     * }
     */
    public function querycardlifecycle($msisdn = null, $iccid = null, $imsi = null)
    {
        $data = [];
        if (!empty($msisdn)) {
            $data['msisdn'] = $msisdn;
        }
        if (!empty($iccid)) {
            $data['iccid'] = $iccid;
        }
        if (!empty($imsi)) {
            $data['imsi'] = $imsi;
        }
        $json = $this->post('/querycardlifecycle', '0001000000432', $data);
        return $json[0];
    }

    /**
     * 单个用户已开通服务查询
     * 集团客户可以通过卡号（仅MSISDN）查询物联卡当前的服务开通状态。
     * @param string $msisdn
     * @return array
     * {
     *     issignSms, // SMS服务（大于0-开通，0-关闭）
     *     issignGprs, // GPRS服务（大于0-开通，0-关闭）
     *     issignCall, // 语音服务（大于0-开通，0-关闭）
     *     issignApn, // APN服务（大于0-开通，0-关闭）
     *     msisdn // 物联卡号码
     * }
     */
    public function useropenservice($msisdn)
    {
        $data = [];
        $data['msisdn'] = $msisdn;
        $json = $this->post('/useropenservice', '0001000000447', $data);
        return $json[0];
    }

    /**
     * 物联卡开户日期查询
     * 集团客户可以通过API来实现对单个询物联卡基础信息的查询，包括ICCID、MSISDN、IMSI、入网日期（开户日期）。
     * @param string $msisdn
     * @param string $iccid
     * @param string $imsi
     * @return array
     * {
     *     msisdn,
     *     iccid,
     *     imsi,
     *     openTime // 开户时间
     * }
     */
    public function querycardopentime($msisdn = null, $iccid = null, $imsi = null)
    {
        $data = [];
        if (!empty($msisdn)) {
            $data['msisdn'] = $msisdn;
        }
        if (!empty($iccid)) {
            $data['iccid'] = $iccid;
        }
        if (!empty($imsi)) {
            $data['imsi'] = $imsi;
        }
        $json = $this->post('/querycardopentime', '0001000000901', $data);
        return $json[0];
    }

    /**
     * 码号信息批量查询
     * 集团客户可以根据ICCID、IMSI、MSISDN任意1个码号批量查询剩余2个码号的信息。每次查询不超过100张卡。
     * @param array $msisdns
     * @param array $iccids
     * @param array $imsis
     * @return array
     * [
     *     {
     *         status, // 0 成功 非0 失败
     *         message, // 错误信息
     *         iccid, imsi, msisdn
     *     },
     *     ...
     * ]
     */
    public function batchquerycardinfo($msisdns = [], $iccids = [], $imsis = [])
    {
        $data = [];
        if (!empty($msisdns)) {
            $data['msisdns'] = implode('_', $msisdns);
        }
        if (!empty($iccids)) {
            $data['iccids'] = implode('_', $iccids);
        }
        if (!empty($imsis)) {
            $data['imsis'] = implode('_', $imsis);
        }
        $json = $this->post('/batchquerycardinfo', '0001000000928', $data);
        return $json;
    }

    /**
     * 物联卡生命周期批量查询
     * 集团客户根据卡号（imsi、msisdn、iccid三个中任意一个），批量查询物联卡当前生命周期，
     * 生命周期包括：00:正式期，01:测试期，02:沉默期，03:其他。
     * 每次查询不超过100张卡。
     * @param array $msisdns
     * @param array $iccids
     * @param array $imsis
     * @return array
     * [
     *     {
     *         lifecycle, // 物联卡生命周期。包括：00:正式期，01:测试期，02:沉默期，03:其他。
     *         message, // 错误信息
     *         msisdn,
     *         iccid,
     *         imsi,
     *         opentime, // 物联卡开卡时间。格式：YYYYMMDD。
     *         status // 0 成功 非0 失败
     *     },
     *     ...
     * ]
     */
    public function batchquerycardlifecycle($msisdns = [], $iccids = [], $imsis = [])
    {
        $data = [];
        if (!empty($msisdns)) {
            $data['msisdns'] = implode('_', $msisdns);
        }
        if (!empty($iccids)) {
            $data['iccids'] = implode('_', $iccids);
        }
        if (!empty($imsis)) {
            $data['imsis'] = implode('_', $imsis);
        }
        $json = $this->post('/batchquerycardlifecycle', '0001000000929', $data);
        return $json;
    }

    /**
     * 终端物联卡密钥信息同步
     * 该API提供批量终端物联卡密钥信息同步的能力（每次不超过100张卡）。
     * 该接口可同时用于新增和修改物联卡的秘钥信息（API平台接收到同步信息后，
     * 若存在已有卡号，直接替换整条原有信息，若为新卡号，直接新增整条记录）。
     * @param array $terminalInfos 物联卡密钥信息集合
     * 1、码号信息IMSI、MSISDN、ICCID三个号码必须有且只有一项
     * 2、secretkey为必须同步项
     * 3、imei为可选同步项，非必须
     * [
     *     {msisdn, msisdn, iccid, secretKey, imei},
     *     ...
     * ]
     * @return array
     * {
     *     totalNum, // 收到的总卡数，为0时返回"0"
     *     failureNum, // 失败入库卡数，为0时返回"0"
     *     successNum, // 成功入库卡数，为0时返回"0"
     *     failInfos: [ // 入库失败错误信息集合，没有失败为空
     *         {
     *             imsi/msisdn/iccid, // 对应上传的卡号，按上传的参数返回
     *             secretKey, // 对应上传的密钥，按上传的参数返回
     *             imei, // 对应上传的imei，若上传了则按上传的参数返回
     *             status, // 返回卡号对应的错误码
     *             message // 卡号对应同步失败信息
     *         },
     *         ...
     *     ],
     * }
     */
    public function addterminalinfo($terminalInfos)
    {
        $totalNum = count($terminalInfos);
        $data = [];
        $data['totalNum'] = $totalNum;
        $data['terminalInfos'] = json_encode($terminalInfos);
        $json = $this->post('/addterminalinfo', '', $data);
        return $json[0];
    }

    /**
     * 终端物联卡密钥信息删除
     * 该API提供批量终端物联卡密钥信息删除的能力（每次不超过100张卡）。删除时，直接删除物联卡卡号对应的整条记录。
     * @param array $msisdns
     * @param array $iccids
     * @param array $imsis
     * @return array
     * {
     *     totalNum, // 收到的总卡数，为0时返回"0"
     *     failureNum, // 失败入库卡数，为0时返回"0"
     *     successNum, // 成功入库卡数，为0时返回"0"
     *     failInfos: [ // 入库失败错误信息集合，没有失败为空
     *         {
     *             imsi/msisdn/iccid, // 对应上传的卡号，按上传的参数返回
     *             status, // 返回卡号对应的错误码
     *             message // 卡号对应同步失败信息
     *         },
     *         ...
     *     ],
     * }
     */
    public function deleteterminalinfo($msisdns = [], $iccids = [], $imsis = [])
    {
        $data = [];
        if (!empty($msisdns)) {
            $data['msisdns'] = implode('_', $msisdns);
        }
        if (!empty($iccids)) {
            $data['iccids'] = implode('_', $iccids);
        }
        if (!empty($imsis)) {
            $data['imsis'] = implode('_', $imsis);
        }
        $json = $this->post('/deleteterminalinfo', '', $data);
        return $json[0];
    }

    /**
     * 集团用户数查询
     * 集团客户可以主动查询截至某一天所属物联卡的用户总数（该时间点最晚为：当前时间）。
     * @param string $queryDate 所查询日期（服务端时间为准，例如：系统当前日期20170808）
     * @return string 用户总数
     */
    public function groupuserinfo($queryDate)
    {
        $data = [];
        $data['queryDate'] = $queryDate;
        $json = $this->post('/groupuserinfo', '0001000000039', $data);
        return $json[0]['total'];
    }

    /**
     * 欠费停机用户批量查询
     * 集团客户可批量查询集团内处于欠费停机状态的物联卡。
     * @param integer $pageSize 必须为大于等于1且小于等于20的整数
     * @param integer $pageNum 必须传入大于0的整数
     * @return array
     * {
     *     total, // 总计异常用户数
     *     userInfos: [ // 当前请求页面用户数量
     *         {
     *             msisdn,
     *             status, // 异常状态，欠费停机用户状态包括: 02-停机且停机原因为欠费停机
     *             currentDate, // 当前查询日期，日期格式为YYYYMMDD
     *             statusDate // 状态变更日期，日期格式为YYYYMMDD
     *         },
     *         ...
     *     ]
     * }
     */
    public function arrearageuserinfo($pageSize = 20, $pageNum = 1)
    {
        $data = [];
        $data['pageSize'] = $pageSize;
        $data['pageNum'] = $pageNum;
        $json = $this->post('/arrearageuserinfo', '0001000000328', $data);
        return $json[0]['arrearageUserInfo'];
    }

    /**
     * 集团各生命周期物联卡数量查询
     * 集团客户可以查询所属物联卡中各个生命周期的卡数量。
     * @return array
     * {
     *     testnum, // 该集团客户处于测试期的物联卡数量若数量为0，返回值为"0"
     *     sleepnum, // 该集团客户处于沉默期的物联卡数量若数量为0，返回值为"0"
     *     normalnum, // 该集团客户正常使用的物联卡数量若数量为0，返回值为"0"
     *     othernum, // 其他状态的卡数量
     * }
     */
    public function querycardcount()
    {
        $data = [];
        $json = $this->post('/querycardcount', '0001000000417', $data);
        return $json[0];
    }

    /**
     * 集团异常状态物联卡数据量查询
     * 集团客户通过API服务平台实时查询异常状态物联卡的数量。
     * @return string 集团异常物联卡的数量
     */
    public function queryabnormalcardcount()
    {
        $data = [];
        $json = $this->post('/queryabnormalcardcount', '0001000000427', $data);
        return $json[0]['cardUnusualNum'];
    }

    /**
     * 集团GPRS在线物联卡数量查询
     * 集团客户通过API服务平台实时查询GPRS在线物联卡的数量。
     * @return string GPRS在线物联卡数量
     */
    public function querygprsonlinecardcount()
    {
        $data = [];
        $json = $this->post('/querygprsonlinecardcount', '0001000000428', $data);
        return $json[0]['gprstotalnum'];
    }

    /**
     * 集团用户数变化信息查询
     * 集团客户可以通过API来实现对指定日期（7天之内，不含当天）成员总数、数量增加减少情况查询。
     * @param string $queryDate 查询日期，举例：20180125 仅能查询当天之前7天之内的数据
     * @return array
     * {
     *     totalCnt, // 用户总数
     *     increaseCnt // 净增用户数量
     */
    public function querygroupuserchangenum($queryDate)
    {
        $data = [];
        $data['queryDate'] = $queryDate;
        $json = $this->post('/querygroupuserchangenum', '0001000008894', $data);
        return $json[0];
    }

    /**
     * 用户余额信息实时查询
     * 集团客户可以查询所属物联卡的实时余额情况，每次查询一张指定物联卡的实时余额
     * @param string $msisdn
     * @param string $iccid
     * @param string $imsi
     * @return string 余额，单位元
     */
    public function balancerealsingle($msisdn = null, $iccid = null, $imsi = null)
    {
        $data = [];
        if (!empty($msisdn)) {
            $data['msisdn'] = $msisdn;
        }
        if (!empty($iccid)) {
            $data['iccid'] = $iccid;
        }
        if (!empty($imsi)) {
            $data['imsi'] = $imsi;
        }
        $json = $this->post('/balancerealsingle', '0001000000035', $data);
        return $json[0]['balance'];
    }

    /**
     * 用户余额信息实时批量查询
     * 集团客户根据卡号（IMSI、MSISDN、ICCID三个中任意一个），批量查询物联卡当前用户余额信息。
     * （实时查询）。每次查询能力最大不超过100张卡。
     * @param array $msisdns
     * @param array $iccids
     * @param array $imsis
     * @return array
     * [
     *     {
     *         status,
     *         message,
     *         msisdn/imsi/iccid
     *         balance
     *     },
     *     ...
     * ]
     */
    public function batchquerybalance($msisdns = [], $iccids = [], $imsis = [])
    {
        $data = [];
        if (!empty($msisdns)) {
            $data['msisdns'] = implode('_', $msisdns);
        }
        if (!empty($iccids)) {
            $data['iccids'] = implode('_', $iccids);
        }
        if (!empty($imsis)) {
            $data['imsis'] = implode('_', $imsis);
        }
        $json = $this->post('/batchquerybalance', '0001000000931', $data);
        return $json;
    }

    /**
     * 用户当月GPRS查询
     * 集团客户可查询所属物联卡当月截止到前一天24点为止的GPRS使用量（单位：KB）。
     * @param string $msisdn
     * @param string $iccid
     * @param string $imsi
     * @return string 用户当月使用的总的GPRS流量（单位：KB）
     */
    public function gprsusedinfosingle($msisdn = null, $iccid = null, $imsi = null)
    {
        $data = [];
        if (!empty($msisdn)) {
            $data['msisdn'] = $msisdn;
        }
        if (!empty($iccid)) {
            $data['iccid'] = $iccid;
        }
        if (!empty($imsi)) {
            $data['imsi'] = $imsi;
        }
        $json = $this->post('/gprsusedinfosingle', '0001000000012', $data);
        return $json[0]['total_gprs'];
    }

    /**
     * 短信批量查询
     * 集团客户可以查询所属物联卡近期短信使用情况，批量查询多个用户、指定日期的短信使用量（仅支持查询最近7天中某一天的数据）
     * @param $queryDate string 查询时间（例如：系统当前日期20150421，7日内，即20150414-20150420有效）
     * @param array $msisdns
     * @param array $iccids
     * @param array $imsis
     * @return array
     * [
     *     {
     *         SMS, // 短信条数（单位：条）
     *         MSISDN,
     *         ICCID,
     *         IMSI
     *     },
     *     ...
     * ]
     */
    public function batchsmsusedbydate($queryDate, $msisdns = [], $iccids = [], $imsis = [])
    {
        $data = [];
        $data['query_date'] = $queryDate;
        if (!empty($msisdns)) {
            $data['msisdns'] = implode('_', $msisdns);
        }
        if (!empty($iccids)) {
            $data['iccids'] = implode('_', $iccids);
        }
        if (!empty($imsis)) {
            $data['imsis'] = implode('_', $imsis);
        }
        $json = $this->post('/batchsmsusedbydate', '0001000000026', $data);
        return $json;
    }

    /**
     * 流量信息批量查询
     * 集团客户可以查询所属物联卡近期GPRS流量使用情况，批量查询多个用户、指定日期的GPRS使用量（仅支持查询最近7天中某一天的数据）。
     * @param $queryDate string 查询时间（例如：系统当前日期20150421，7日内，即20150414-20150420有效）
     * @param array $msisdns
     * @param array $iccids
     * @param array $imsis
     * @return array
     * [
     *     {
     *         GPRS, // 当日使用的GPRS流量总量（单位：KB）
     *         MSISDN,
     *         ICCID,
     *         IMSI
     *     },
     *     ...
     * ]
     */
    public function batchgprsusedbydate($queryDate, $msisdns = [], $iccids = [], $imsis = [])
    {
        $data = [];
        $data['query_date'] = $queryDate;
        if (!empty($msisdns)) {
            $data['msisdns'] = implode('_', $msisdns);
        }
        if (!empty($iccids)) {
            $data['iccids'] = implode('_', $iccids);
        }
        if (!empty($imsis)) {
            $data['imsis'] = implode('_', $imsis);
        }
        $json = $this->post('/batchgprsusedbydate', '0001000000027', $data);
        return $json;
    }

    /**
     * 用户当月短信查询
     * 集团客户可以查询所属物联卡当月短信使用情况，每次查询一张物联卡的当月短信使用量。
     * @param string $msisdn
     * @param string $iccid
     * @param string $imsi
     * @return string 用户当月短信条数（条）
     */
    public function smsusedinfosingle($msisdn = null, $iccid = null, $imsi = null)
    {
        $data = [];
        if (!empty($msisdn)) {
            $data['msisdn'] = $msisdn;
        }
        if (!empty($iccid)) {
            $data['iccid'] = $iccid;
        }
        if (!empty($imsi)) {
            $data['imsi'] = $imsi;
        }
        $json = $this->post('/smsusedinfosingle', '0001000000036', $data);
        return $json[0]['sms'];
    }

    /**
     * 用户短信使用查询
     * 集团客户可以查询所属物联卡某一天的短信使用情况（该时间点最晚比实时早一天）。
     * @param $queryDate string 查询时间（例如：系统当前日期20150421，7日内，即20150414-20150420有效）
     * @param string $msisdn
     * @param string $iccid
     * @param string $imsi
     * @return string 用户当日短信条数（条）
     */
    public function smsusedbydate($queryDate, $msisdn = null, $iccid = null, $imsi = null)
    {
        $data = [];
        $data['query_date'] = $queryDate;
        if (!empty($msisdn)) {
            $data['msisdn'] = $msisdn;
        }
        if (!empty($iccid)) {
            $data['iccid'] = $iccid;
        }
        if (!empty($imsi)) {
            $data['imsi'] = $imsi;
        }
        $json = $this->post('/smsusedbydate', '0001000000040', $data);
        return $json[0]['sms'];
    }

    /**
     * 套餐内GPRS流量使用情况实时查询 (集团客户)
     * 集团客户可查询所属物联卡当月套餐内GPRS流量使用情况。
     * @param string $msisdn
     * @param string $iccid
     * @param string $imsi
     * @return array
     * [
     *     {
     *         prodid, // 套餐ID
     *         prodinstid, // 产品实例ID
     *         prodname, // 套餐名称
     *         total, // 套餐总量（单位：MB）
     *         used, // 套餐使用量（单位：KB）
     *         left // 套餐剩余量（单位：KB）
     *     },
     *     ...
     * ]
     */
    public function gprsrealtimeinfo($msisdn = null, $iccid = null, $imsi = null)
    {
        $data = [];
        if (!empty($msisdn)) {
            $data['msisdn'] = $msisdn;
        }
        if (!empty($iccid)) {
            $data['iccid'] = $iccid;
        }
        if (!empty($imsi)) {
            $data['imsi'] = $imsi;
        }
        $json = $this->post('/gprsrealtimeinfo', '0001000000083', $data);
        return $json[0]['gprs'];
    }

    /**
     * 物联卡单日GPRS使用量查询
     * 集团客户可以主动查询某张物联卡、某一天的GPRS使用量，单位KB（仅能查询昨天或昨天之前的最近7天的某一天的使用量）。
     * @param string $queryDate 所查询日期 必须为昨天之前的7天内的某一天，格式为yyyymmdd
     * @param string $msisdn
     * @param string $iccid
     * @param string $imsi
     * @return string GPRS使用量（单位：KB）
     */
    public function gprsusedinfosinglebydate($queryDate, $msisdn = null, $iccid = null, $imsi = null)
    {
        $data = [];
        $data['queryDate'] = $queryDate;
        if (!empty($msisdn)) {
            $data['msisdn'] = $msisdn;
        }
        if (!empty($iccid)) {
            $data['iccid'] = $iccid;
        }
        if (!empty($imsi)) {
            $data['imsi'] = $imsi;
        }
        $json = $this->post('/gprsusedinfosinglebydate', '0001000000407', $data);
        return $json[0]['gprs'];
    }

    /**
     * 物联卡当月套餐内短信信息批量查询
     * 集团客户根据卡号（IMSI、MSISDN、ICCID三个中任意一个），
     * 批量按套餐查询当月物联卡短信信息（如果今日是当月第一天，
     * 则查询上月全月短信信息；其他情况下，查询本月截止到T-1日24:00之前的短信信息，
     * 不需传入日期，默认T为查询当日，日期不可选择）。
     * 每次查询能力最大不超过100张卡。
     * @param array $msisdns
     * @param array $iccids
     * @param array $imsis
     * @return array
     * [
     *     {
     *         status, // 查询状态，0-成功，非0-失败
     *         message, // 错误信息。错误码对应的错误描述，参考错误码列表
     *         msisdn/imsi/iccid, // 码号信息，同入参
     *         prodId, // 套餐ID
     *         prodName, // 套餐名称
     *         smsTotal, // 套餐总量（单位：条）
     *         smsUsed, // 套餐使用量（单位：条）
     *         smsLeft, // 套餐剩余量（单位：条）
     *     },
     *     ...
     * ]
     */
    public function batchquerymonthsmsinfo($msisdns = [], $iccids = [], $imsis = [])
    {
        $data = [];
        if (!empty($msisdns)) {
            $data['msisdns'] = implode('_', $msisdns);
        }
        if (!empty($iccids)) {
            $data['iccids'] = implode('_', $iccids);
        }
        if (!empty($imsis)) {
            $data['imsis'] = implode('_', $imsis);
        }
        $json = $this->post('/batchquerymonthsmsinfo', '0001000000930', $data);
        return $json;
    }

    /**
     * 物联卡套餐内GPRS信息实时批量查询
     * 集团客户可以根据ICCID、IMSI、MSISDN任意1个码号，批量按套餐查询所属物联卡当月套餐内GPRS流量实时使用情况。每次查询能力最大不超过100张卡。
     * @param array $msisdns
     * @param array $iccids
     * @param array $imsis
     * @return array
     * [
     *     {
     *         status, // 查询状态，0-成功，非0-失败
     *         message, // 错误信息。错误码对应的错误描述，参考错误码列表
     *         msisdn/imsi/iccid, // 码号信息，同入参
     *         prodId, // 套餐ID
     *         podInstId, // 套餐订购ID
     *         prodName, // 套餐名称
     *         gprsTotal, // 套餐总量（单位：MB，小数位保留2位）
     *         gprsUsed, // 套餐使用量（单位：KB，无小数位，只取整数，四舍五入）
     *         gprsLeft, // 套餐剩余量（单位：KB，无小数位，只取整数，四舍五入）
     *     },
     *     ...
     * ]
     */
    public function batchqueryrealtimegprsinfo($msisdns = [], $iccids = [], $imsis = [])
    {
        $data = [];
        if (!empty($msisdns)) {
            $data['msisdns'] = implode('_', $msisdns);
        }
        if (!empty($iccids)) {
            $data['iccids'] = implode('_', $iccids);
        }
        if (!empty($imsis)) {
            $data['imsis'] = implode('_', $imsis);
        }
        $json = $this->post('/batchqueryrealtimegprsinfo', '0001000000932', $data);
        return $json;
    }

    /**
     * 物联卡当月流量共享使用信息实时查询
     * 集团客户可以通过卡号（msisdn\iccid\imsi，单卡）查询集团归属物联卡当月流量共享的实时使用情况。
     * @param string $msisdn
     * @param string $iccid
     * @param string $imsi
     * @return array
     * {
     *     isFlowShare, // 物联卡是否加入流量共享：0 – 加入 1 – 未加入
     *     prodId, // 物联卡加入的流量共享产品ID，物联卡未加入流量共享时为空。
     *     prodInstId, // 物联卡加入的流量共享产品实例ID，物联卡未加入流量共享时为空。
     *     prodName, // 物联卡加入的流量共享产品名称，物联卡未加入流量共享时为空。
     *     gprsTotal, // 流量共享总量（单位：MB，小数位保留2位），物联卡未加入流量共享时为空。
     *     gprsUsed, // 流量共享使用量（单位：KB，无小数位，只取整数，四舍五入），物联卡未加入流量共享时为空。
     *     gprsLeft, // 流量共享剩余量（单位：KB，无小数位，只取整数，四舍五入），物联卡未加入流量共享时为空。
     * }
     */
    public function querygprsshareused($msisdn = null, $iccid = null, $imsi = null)
    {
        $data = [];
        if (!empty($msisdn)) {
            $data['msisdn'] = $msisdn;
        }
        if (!empty($iccid)) {
            $data['iccid'] = $iccid;
        }
        if (!empty($imsi)) {
            $data['imsi'] = $imsi;
        }
        $json = $this->post('/querygprsshareused', '0001000008899', $data);
        return $json[0];
    }

    /**
     * 物联卡当月流量共享使用信息实时批量查询
     * 集团客户可以通过卡号（msisdn\iccid\imsi，不超过20张卡）查询集团归属物联卡当月流量共享的实时使用情况。
     * @param array $msisdns
     * @param array $iccids
     * @param array $imsis
     * @return array
     * [
     *     {
     *         status, // 查询状态，0-成功，非0-失败
     *         message, // 错误信息。错误码对应的错误描述，参考错误码列表
     *         msisdn/iccid/imsi, // 码号信息，同入参
     *         isFlowShare, // 物联卡是否加入流量共享：0 – 加入 1 – 未加入
     *         prodId, // 物联卡加入的流量共享产品ID，物联卡未加入流量共享时为空。
     *         prodInstId, // 物联卡加入的流量共享产品实例ID，物联卡未加入流量共享时为空。
     *         prodName, // 物联卡加入的流量共享产品名称，物联卡未加入流量共享时为空。
     *         gprsTotal, // 流量共享总量（单位：MB，小数位保留2位），物联卡未加入流量共享时为空。
     *         gprsUsed, // 流量共享使用量（单位：KB，无小数位，只取整数，四舍五入），物联卡未加入流量共享时为空。
     *         gprsLeft, // 流量共享剩余量（单位：KB，无小数位，只取整数，四舍五入），物联卡未加入流量共享时为空。
     *     },
     *     ...
     * ]
     */
    public function batchquerygprsshareused($msisdns = [], $iccids = [], $imsis = [])
    {
        $data = [];
        if (!empty($msisdns)) {
            $data['msisdns'] = implode('_', $msisdns);
        }
        if (!empty($iccids)) {
            $data['iccids'] = implode('_', $iccids);
        }
        if (!empty($imsis)) {
            $data['imsis'] = implode('_', $imsis);
        }
        $json = $this->post('/batchquerygprsshareused', '0001000008900', $data);
        return $json;
    }

    /**
     * 物联卡资费套餐查询
     * 集团客户可以根据物联卡码号信息查询该卡的套餐信息。
     * @param string $msisdn
     * @param string $iccid
     * @param string $imsi
     * @return array
     * {
     *     msisdn, iccid, imsi,
     *     prodinfos: [
     *         {
     *             prodid, // 套餐资费编号
     *             prodname, // SIM卡套餐名称
     *             prodinstefftime, // 该套餐的生效时间
     *             prodinstexptime, // 该套餐的失效时间
     *         },
     *         ...
     *     ]
     * }
     */
    public function querycardprodinfo($msisdn = null, $iccid = null, $imsi = null)
    {
        $data = [];
        if (!empty($msisdn)) {
            $data['msisdn'] = $msisdn;
        }
        if (!empty($iccid)) {
            $data['iccid'] = $iccid;
        }
        if (!empty($imsi)) {
            $data['imsi'] = $imsi;
        }
        $json = $this->post('/querycardprodinfo', '0001000000264', $data);
        return $json[0];
    }

    /**
     * 物联卡位置定位
     * 集团客户可以通过调用位置定位API获取目标终端的位置信息（经纬度）。
     * @param string $msisdn
     * @param string $iccid
     * @param string $imsi
     * @return array
     * {
     *     lat, lon
     * }
     */
    public function location_slis($msisdn = null, $iccid = null, $imsi = null)
    {
        $data = [];
        if (!empty($msisdn)) {
            $data['msisdn'] = $msisdn;
        }
        if (!empty($iccid)) {
            $data['iccid'] = $iccid;
        }
        if (!empty($imsi)) {
            $data['imsi'] = $imsi;
        }
        $json = $this->post('/location_slis', '', $data);
        return $json[0];
    }

    /**
     * 物联卡区域位置查询
     * 集团客户可以通过卡号（MSISDN/ICCID/IMSI，单卡）查询该卡当前所在的区域位置信息（区号）。
     * 如被定位用户漫游出中国大陆地区后（港澳台），
     * 物联卡能力开放平台返回结果中同时带上地区名：852香港、853澳门、886台湾。
     * @param string $msisdn
     * @param string $iccid
     * @param string $imsi
     * @return array
     * {
     *     msisdn, iccid, imsi,
     *     areaCode // 城市区号
     * }
     */
    public function location_area($msisdn = null, $iccid = null, $imsi = null)
    {
        $data = [];
        if (!empty($msisdn)) {
            $data['msisdn'] = $msisdn;
        }
        if (!empty($iccid)) {
            $data['iccid'] = $iccid;
        }
        if (!empty($imsi)) {
            $data['imsi'] = $imsi;
        }
        $json = $this->post('/location_area', '', $data);
        return $json[0];
    }

    /**
     * 物联卡卡号查询文件型接口
     * 指定集团客户可以通过文件的形式获取7天内（不含当天）集团下物联卡卡号信息。
     * （使用该接口的客户需预先配置）。
     * @param string $query_date 查询日期YYYYMMDD，7天内有效（例如：系统当前日期20180321，即20180314-20180320有效）
     * @return string ZIP文件内容，（主文件，解压后为CSV格式，主文件的检验码MD5值存放于请求报文头header中）到客户平台。
     */
    public function downloadCardNo($query_date)
    {
        $data = [];
        $data['query_date'] = $query_date;
        return $this->post2('/download/cardNo', '0001000000934', $data);
    }

    /**
     * 物联卡激活时间查询文件型接口
     * 指定集团客户可以通过文件的形式获取7天内（不含当天）集团下物联卡激活时间。
     * @param string $query_date 查询日期YYYYMMDD，7天内有效（例如：系统当前日期20180321，即20180314-20180320有效）
     * @return string ZIP文件内容，（主文件，解压后为CSV格式，主文件的检验码MD5值存放于请求报文头header中）到客户平台。
     */
    public function downloadActiveTime($query_date)
    {
        $data = [];
        $data['query_date'] = $query_date;
        return $this->post2('/download/activeTime ', '0001000000933', $data);
    }

    /**
     * 物联卡状态查询文件型接口
     * 指定集团客户可以通过文件的形式获取7天内（不含当天）集团下物联卡状态信息。
     * @param string $query_date 查询日期YYYYMMDD，7天内有效（例如：系统当前日期20180321，即20180314-20180320有效）
     * @return string ZIP文件内容，（主文件，解压后为CSV格式，主文件的检验码MD5值存放于请求报文头header中）到客户平台。
     */
    public function downloadCardStatus($query_date)
    {
        $data = [];
        $data['query_date'] = $query_date;
        return $this->post2('/download/cardStatus ', '0001000000935', $data);
    }

    /**
     * 短信状态重置
     * 集团客户可重置HLR上短信的状态，以保证短信正常使用。
     * @param string $msisdn
     * @param string $iccid
     * @param string $imsi
     * @return string 0-重置成功 100-短信重置刷新失败
     */
    public function smsstatusreset($msisdn = null, $iccid = null, $imsi = null)
    {
        $data = [];
        if (!empty($msisdn)) {
            $data['msisdn'] = $msisdn;
        }
        if (!empty($iccid)) {
            $data['iccid'] = $iccid;
        }
        if (!empty($imsi)) {
            $data['imsi'] = $imsi;
        }
        $json = $this->post('/smsstatusreset', '0001000000034', $data);
        return $json[0]['status'];
    }

    /**
     * 物联卡终端控制下行模板短信
     * 集团客户业务平台可以调用该能力向目标终端号码（不超过300个）发送模板短信，实现定制化的终端控制功能。
     * 集团客户需在API接入申请的时候同步提交模板短信的内容，客户申请模板短信之后，
     * API服务平台将审核模板内容，审核通过后编制4位数字的动作码并反馈给客户。
     * 模板短信中可包含多个变量参数，变量参数用{数字}表示，
     * 且必须从1开始连续编号，如{1}、{2}、{3}，单个变量值的长度不超过10位字符。
     * 短信最终发送的内容，由模板短信+实际传入的变量参数形成，如Set temperature 25，
     * 最终发送的单条短信长度不超过140字节。
     * 短信模板示例如下：
     * 动作码	模板短信内容
     * 0001	location on
     * 0002	location off
     * 0003	set length {1} width {2} height {3}
     * @param string $actionid 动作码，动作码对应相应的短信模板
     * @param array $msisdns 发送控制短信的物联卡号码
     * @param array $params 变量参数，单个变量值的长度不超过10位字符，多个参数用下划线分隔。
     * 例如：section_792312_666。如果没有变量参数，不传入params参数。
     * 多个变量参数时，按顺序逐个替换短信模板量。
     * 例如，短信模板为set length {1} width {2} height {3}，
     * 参数为10_3_7。最终的短信为set length 10 width 3 height 7。
     * 变量参数内容不允许包含“_”下划线，不支持中文，只支持英文、数字或符号。
     * 变量参数+模板短信形成的最终短信内容不得超过140字节。
     * @return array
     * {
     *     succSvcNum, // 成功号码个数
     *     failSvcNum, // 成功号码个数
     *     failSvcDetail: [ // failSvcNum返回“0”时，failSvcDetail为空，此时不需要解析failSvcDetail的数据，只有在failSvcNum不为“0”时，failSvcDetail才有数据。
     *         {
     *             status, message, msisdn
     *         },
     *         ...
     *     ]
     * }
     */
    public function sendsmstemplet($actionid, $msisdns = [], $params = [])
    {
        $data = [];
        $data['actionid'] = $actionid;
        $data['msisdns'] = $msisdns;
        if (!empty($params)) {
            $data['params'] = implode('_', $params);
        }
        $json = $this->post('/sendsmstemplet', '', $data);
        return $json[0];
    }

    /**
     * 物联卡终端控制上行短信
     * 集团客户可通过目标终端发送上行短信给对应的业务平台，其短信格式为：appid#短信内容。
     * 集团客户需在API接入申请的时候同步提交接收上行短信的业务平台ip地址。
     * 此接口为平台被动接口，中移将上行发送到这里
     */
}
